home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / actionrp / nhplusx.bin / nhplusx / nhplusX / nhplus / tmac.n < prev    next >
Text File  |  1995-09-10  |  25KB  |  764 lines

  1. \" @(#)$Id: tmac.n,v 3.0 89/06/21 21:44:28 syd Exp $
  2. .\" The News macro package
  3. .\"
  4. .\" This  is  the macro package that is used to format news documents.  It
  5. .\" was written because many sites do not have one of the -mm or -ms pack-
  6. .\" ages that the documents use.   This is NOT compatible with EITHER, but
  7. .\" (I hope) will become the standard for all news  documents  (man  pages
  8. .\" excepted, since everyone seems to have -man.)
  9. .\"
  10. .\" This package was written using  only  the  "NROFF/TROFF Users' Guide",
  11. .\" and  therefore  if  you  can run NROFF/TROFF, you can legitimately use
  12. .\" this package.  However, because NROFF/TROFF are proprietary  programs,
  13. .\" I  cannot  place  this  package in the public domain.  This should not
  14. .\" matter, because if you legitimately have  NROFF/TROFF,  you  have  the
  15. .\" documentation; if not, you can't run off the documentation anyway.
  16. .\"
  17. .\" This  package may be circulated freely with the news documentation; it
  18. .\" may not be sold, but is to be distributed with  the  unformatted  news
  19. .\" documents.  However,  the name of the author and the place at which it
  20. .\" was written (in the author's own  time,  of  course)  are  not  to  be
  21. .\" removed  from the package regardless of how it is modified or altered.
  22. .\" Further, please do not distribute this package if you make any changes
  23. .\" because  I  don't want to get bug reports of macros I haven't written;
  24. .\" if you have a goodie you want me to add, send it to me and we'll talk.
  25. .\" (I really do like feedback!)  I'd really appreciate your cooperation.
  26. .\"
  27. .\" Author:    Matt Bishop
  28. .\"        Research Institute for Advanced Computer Science
  29. .\"        Mail Stop 230-5
  30. .\"         NASA Ames Research Center
  31. .\"        Moffett Field, CA  94035
  32. .\"
  33. .\" version 1.0        September 28, 1985    mab@riacs.arpa
  34. .\"     initial version
  35. .\" version 1.1        October 25, 1985    mab@riacs.arpa
  36. .\"    fixed an incredibly obscure footnote bug (that occurred twice in
  37. .\"    the news documentation!) which put footnoted words on  one  page
  38. .\"    and the footnote on the next if the word was in the next-to-last
  39. .\"    or last line; commented it, and generally cleaned up
  40. .\" Version 1.2        October 27, 1985    mab@riacs.arpa
  41. .\"    Added a few more comments and a check to keep footnotes lined up
  42. .\"    with the bottom margin.
  43. .\" Version 1.3        February 12, 1986    mab@riacs.arpa
  44. .\"    Added an error check to catch unmatched ef's and ed's
  45. .\" Version 1.4        December 29, 1986    mab@riacs.edu
  46. .\"    Changed footnote for ux, pd, and vx macros and  added  a  string
  47. .\"    for rg ("Registered Trademark")
  48. .\" Version 1.5        January 2, 1989        Matt.Bishop@dartmouth.edu
  49. .\"    Minor modifications for nroff compatibility
  50. .\" Version 1.6        March 15, 1989        Matt.Bishop@dartmouth.edu
  51. .\"                        ..!bear.dartmouth.edu!bishop
  52. .\"    Fixed a bug in footnote handling (again, sigh ...)  This one
  53. .\"    occurred when the the "fo" trap position was reset just beneath
  54. .\"    the current line; the footnote overflow trap would kick in and
  55. .\"    never be closed.
  56. .\"
  57. .\"
  58. .\" **********
  59. .\" these preserve and restore various things
  60. .\" they are used to shorten other macros
  61. .de yf                    \" restore fonts
  62. .ft \\n(f2                \" previous font
  63. .ft \\n(f1                \" current font
  64. ..
  65. .de yi                    \" restore indents
  66. 'in \\n(i2u                \" previous indent
  67. 'in \\n(i1u                \" current indent
  68. ..
  69. .de ys                    \" restore point sizes
  70. .ps \\n(s2                \" previous point size
  71. .ps \\n(s1                \" current point size
  72. ..
  73. .de yv                    \" restore vertical spacings
  74. .vs \\n(v2u                \" previous vertical spacing
  75. .vs \\n(v1u                \" current vertical spacing
  76. ..
  77. .de ya                    \" restore everything
  78. .yf                    \" restore fonts
  79. .yi                    \" restore indents
  80. .ys                    \" restore point sizes
  81. .yv                    \" restore vertical spacing
  82. ..
  83. .de zf                    \" preserve fonts
  84. .nr f1 \\n(.f                \" current font
  85. .ft                    \" switch to previous font
  86. .nr f2 \\n(.f                \" previous font
  87. .ft                    \" back to current font
  88. ..
  89. .de zi                    \" preserve indents
  90. .nr i1 \\n(.iu                \" current indent
  91. 'in                    \" switch to previous indent
  92. .nr i2 \\n(.iu                \" previous indent
  93. 'in                    \" back to current indent
  94. ..
  95. .de zs                    \" preserve point sizes
  96. .nr s1 \\n(.su                \" current point size
  97. .ps                    \" switch to previous point size
  98. .nr s2 \\n(.su                \" previous point size
  99. .ps                    \" back to current point size
  100. ..
  101. .de zv                    \" preserve vertical spacings
  102. .nr v1 \\n(.vu                \" current vertical spacing
  103. .vs                    \" switch to previous vertical spacing
  104. .nr v2 \\n(.vu                \" previous vertical spacing
  105. .vs                    \" back to current vertical spacing
  106. ..
  107. .de za                    \" save everything
  108. .zf                    \" save fonts
  109. .zi                    \" save indents
  110. .zs                    \" save point sizes
  111. .zv                    \" save vertical spacings
  112. ..
  113. .\" **********
  114. .\" these actually print the header and footer titles
  115. .\" they are defined separately from the "hd" and "fo" macros
  116. .\" to make user redefinition easy
  117. .de pt                    \" print header title
  118. .                    \" omit header on first page
  119. .if \\n%>1 \{\
  120. '    sp |\\$1u            \" move to proper position
  121. .    ft 1                \" change to default font
  122. .    ps \\n(ps            \" change to default point size
  123. .    vs \\n(vs            \" change to default spacing
  124. .    tl '\\*(h0'\\*(h1'\\*(h2'    \" center title
  125. .    vs                \" restore current vertical spacing
  126. .    ps                \" restore current point size
  127. .    ft                \" restore current font
  128. .\}
  129. ..
  130. .de pf                    \" print footer title
  131. .ft 1                    \" change to default font
  132. .ps \\n(ps                \" change to default point size
  133. .vs \\n(vs                \" change to default spacing
  134. .ie \\n%=1 .tl '\\*(h0'\\*(h1'\\*(h2'    \" on first page, print the header here
  135. .el        .tl '\\*(f0'\\*(f1'\\*(f2'    \" on other pages, print the footer
  136. .vs                    \" restore current vertical spacing
  137. .ps                    \" restore current point size
  138. .ft                    \" restore current font
  139. ..
  140. .\" **********
  141. .\" these are the top of page (header) and bottom of page (footer) macros
  142. .\" they don't actually print anything, just call the right macros
  143. .de hd                    \" header -- do top of page processing
  144. .if t .if \\n(cm .tl '\(rn'''        \" drop cut mark if needed
  145. .pt \\n(ttu                \" print header
  146. .nr fc 0 1                \" init footnote count
  147. .nr fs \\n(.pu-\\n(bmu-1u        \" if any footnotes, start print here
  148. .nr fp 0-\\n(bmu            \" reset current footer place
  149. .ch fo -\\n(bmu                \" reset footer trap
  150. .if \\n(dn .fz                \" put leftover footnotes st bottom
  151. .ya                    \" restore font, etc.
  152. 'sp |\\n(tmu                \" move to top of body
  153. .ns                    \" don't allow any more space
  154. ..
  155. .de fo                    \" footer -- do bottom of page processing
  156. .za                    \" save font, etc.
  157. .rs                    \" you want motions here
  158. .nr dn 0                \" clobber diversion size register
  159. .if \\n(fc .fd                \" now print the footnotes, if any
  160. 'bp                    \" force out page
  161. ..
  162. .\" **********
  163. .\" these are the footnote macros
  164. .\" here's an overview:
  165. .\"    Footnotes are processed in environment #1, which is  initialized
  166. .\"    at the bottom of this package.  When "fn" is called, nroff/troff
  167. .\"    switches to this environment.  The body of the footnote is saved
  168. .\"    in  the  diversion  "tf" (for "temporary footnote"), so you will
  169. .\"    NEVER spring a trap during the first reading of a footnote. When
  170. .\"    "ef" ("end footnote") is called,  the diversion  is  closed.  If
  171. .\"    this  is the first footnote on the page (ie, the number register
  172. .\"    "fc" is 1), and the footnote height (plus the height of 1  line)
  173. .\"    crosses  the  bottom  margin,  you get the footnoted word on one
  174. .\"    page and the footnote on the other.  In this case we  just  call
  175. .\"    "fo"  manually  (taking case it cannot be re-invoked on the same
  176. .\"    page!)  If this situation does not occur,  we  just  adjust  the
  177. .\"    footer  trap's  position upwards (we'll get to how far in a min-
  178. .\"    ute); if this puts the trap above the current line,  we  reposi-
  179. .\"    tion  the trap just beneath the current line to be sure of trig-
  180. .\"    triggering it once the current line is forced out.
  181. .\"     To reposition the footer trap, we proceed as  follows.  Because
  182. .\"    the  trap  may be sprung in the middle of a line, it is possible
  183. .\"    that the footnote will not fit on the page (regardless of  where
  184. .\"    on the page the footnoted word occurs -- really!) if we move the
  185. .\"    trap up by the size of  the  footnote  diversion  "tf".  So,  we
  186. .\"    fudge things a little bit -- for the first footnote on each page
  187. .\"    we move the footer trap up 1 extra line ("line" being 1v in env-
  188. .\"    ironment  #0).   Unless  the point size and vertical spacing are
  189. .\"    increased between the first footnote and the footer trap's being
  190. .\"    sprung,  this  will  keep  the footnotes on the same page as the
  191. .\"    footnoted word.  But as there may be now as much as 1v of  space
  192. .\"    between the footnote and the bottom margin, which looks HIDEOUS,
  193. .\"    we use the number register "fs" to mark where  the  footer  trap
  194. .\"    would  REALLY go, and just space to it when it comes time to put
  195. .\"    out the footnotes.
  196. .de fd                    \" dump footnotes
  197. .nr gs 1v                \" get a measure of 1 line in env #0
  198. .ev 1                    \" switch to footnote environment
  199. .nr gs +2v                \" min of 2 lines of footnotes
  200. .                    \" if the number register ns > 0,
  201. .                    \" the last text line may contain a
  202. .                    \" footnote that is too big to fit;
  203. .                    \" this checks for such a note and
  204. .                    \" if so, forces the footnote into
  205. .                    \" the "fy" diversion that carries
  206. .                    \" it onto the next text page
  207. .ie (\\n(nsu>0)&(\\n(gsu>=\\n(.tu) 'sp \\n(gsu    \" be sure you can get it down
  208. .el .if \\n(fsu>\\n(nlu 'sp \\n(fsu-\\n(nlu    \" move to footnote start position
  209. 'nf                    \" don't reprocess footnotes
  210. 'in 0                    \" don't indent them any more either
  211. .tf                    \" drop text of footnotes
  212. .rm tf
  213. .if '\\n(.z'fy' .di            \" end overflow diversion, if any
  214. .nr fc 0                \" re-init footnote count
  215. .ev                    \" return to usual environment
  216. ..
  217. .de fn                    \" start footnote
  218. .                    \" look for nested footnotes -- ILLEGAL
  219. .ie \\n(if>0 .er "footnote within footnote"
  220. .el .da tf                \" append footnote to footnote diversion
  221. .nr if +1                \" increment level of footnoting
  222. .nr fc +1                \" one more footnote on this page
  223. .if \\n(fc=1 .nr fp -1v            \" The reason for this "fudge factor"
  224. .                    \" is that there is no way to force
  225. .                    \" NROFF/TROFF to invoke a macro at
  226. .                    \" the end of each line.  At times,
  227. .                    \" the trap boundary will not match up
  228. .                    \" with the bottom of a line, so the
  229. .                    \" "fo" trap which is set at 2320 may
  230. .                    \" not be triggered until 2340 -- and
  231. .                    \" then the footnote won't fit.  This
  232. .                    \" gives some slack so the footnote is
  233. .                    \" more likely to fit. *sigh*
  234. .ev 1                    \" enter footnote environment
  235. .if \\n(fc=1 .fs            \" drop separator if first footnote
  236. .br                    \" flush out any previous line in footnote
  237. .fi                    \" process footnote in fill mode
  238. ..
  239. .de ef                    \" end footnote
  240. .br                    \" flush out the line in footnote
  241. .ie \\n(if<=0 .er "end footnote has no corresponding begin footnote"
  242. .el \{\
  243. .    nr if -1            \" decrement level of footnoting
  244. .    nr fg 2v            \" remember this for repositioning fo
  245. .    ev                \" back to usual environment
  246. .    if \\n(if=0 \{\
  247. .        di            \" end of footnote proper
  248. .        nr fp -\\n(dnu        \" "fo" will be moved at least up this far
  249. .        nr fs -\\n(dnu        \" increase size of footnote
  250. .        ch fo \\n(fpu        \" reposition "fo" trap (first guess)
  251. .                    \" the first part of the "ie" clause
  252. .                    \" is taken in the special case
  253. .                    \" described above
  254. .        ie (\\n(fc=1)&((\\n(nlu+1v+\\n(fgu)>=(\\n(.pu-\\n(bmu)) \{\
  255. .            nr ns \\n(dnu    \" suppress footnote separator
  256. .                    \" since this footnote contains it
  257. .                    \" keep "fo" from being invoked twice
  258. .            ch fo \\n(.pu+1i
  259. .            fo        \" force the page out AT ONCE
  260. .            nr ns 0        \" re-enable footnote separator
  261. .        \}
  262. .                    \" footnote won't fit completely
  263. .                    \" invoke the footer trap but
  264. .                    \" don't worry about the footnote
  265. .                    \" separator (it's already there)
  266. .        el .if (\\n(nlu+1v)>=(\\n(.pu+\\n(fpu) \{\
  267. .                    \" as before we must reposition the
  268. .                    \" "fo" trap to prevent "fo" from
  269. .                    \" being invoked twice
  270. .            ch fo \\n(.pu+1i
  271. .            fo        \" force the page out AT ONCE
  272. .        \}
  273. .    \}
  274. .\}
  275. ..
  276. .de fs                    \" drop footnote separator
  277. .                    \" only if not already dropped
  278. .if \\n(ns=0 \l'1i'
  279. .nr ns 0                \" in case footnotes are over 1 page long
  280. ..
  281. .de fx                    \" process footnote overflow
  282. .if \\n(fc .di fy            \" stuff them in the right place
  283. ..
  284. .de fz                    \" deposit footnote overflow
  285. .fn                    \" treat it as a footnote
  286. .nf                    \" it's already been processed
  287. .in 0                    \"   and indented
  288. .fy                    \" "fx" put it here
  289. .ef                    \" end the footnote
  290. ..
  291. .\" **********
  292. .\" the ones after here are user-invoked (like "fn" and "ef" above)
  293. .\" title, author, etc.
  294. .de mt                    \" main title
  295. \&
  296. .sp |\\n(mtu                \" space
  297. .ft 3                    \" in bold
  298. .ps \\n(ps+2p                \" large point size and
  299. .vs \\n(vs+2p                \" vertical spacing
  300. .ce 1000                \" center the title
  301. .nr t2 1                \" space it
  302. ..
  303. .de au                    \" author
  304. .nr t2 0                \" spacing here
  305. .sp 2v                    \" space
  306. .ft 2                    \" in italics
  307. .ps \\n(ps                \" usual point size and
  308. .vs \\n(vs                \" vertical spacing
  309. .ce 1000                \" center the name(s)
  310. ..
  311. .de ai                    \" author's institution
  312. .if \\n(t2 .sp 2v            \" space after a title
  313. .nr t2 0                \" institution
  314. .ft 2                    \" in italics
  315. .ps \\n(ps                \" usual point size and
  316. .vs \\n(vs                \" vertical spacing
  317. .ce 1000                \" center the name(s)
  318. ..
  319. .de bt                    \" begin text macro
  320. .nr t2 0                \" hold it here
  321. .nr it +1                \" mark as called
  322. .ce 0                    \" end any centering
  323. .sn 3v                    \" a little bit of space
  324. ..
  325. .\" paragraph
  326. .de si                    \" start indented section
  327. .nr lo \\n(lm                \" remember the current level
  328. .nr lm +1                \" go to the next level
  329. .ie '\\$1'' .nr l\\n(lm \\n(l\\n(lo+5n    \" if no arg, indent 5n
  330. .el         .nr l\\n(lm \\$1n        \" otherwise, indent that much
  331. ..
  332. .de ei                    \" end indent
  333. .nr lm -1                \" down one level
  334. .if \\n(lm<0 .nr lm 0            \" make sure you don't go too far
  335. ..
  336. .de pg                    \" plain old paragraph
  337. .if !\\n(it .bt                \" end the title and such
  338. .sn \\n(pdu                \" inter-paragraph spacing
  339. .ft 1                    \" reset a few things (paranoia)
  340. .                    \" these ONLY if not in footnote
  341. .ie \\n(if=0 \{\
  342. .    ps \\n(ps            \" reset point size
  343. .    vs \\n(vs            \" reset vertical spacing
  344. .    ne 1v+\\n(.Vu            \" slightly more than 1 line
  345. .\}
  346. .el \{\
  347. .    ps \\n(ps-2p            \" reset point size
  348. .    vs \\n(vs-2p            \" reset vertical spacing
  349. .\}
  350. .in \\n(l\\n(lmu            \" stop any indenting
  351. .ce 0                    \" stop any centering
  352. .if !'\\$1'L' .if !'\\$1'l' .ti +\\n(piu    \" indent the sucker
  353. ..
  354. .de lp                    \" labelled paragraph
  355. .pg l                    \" reset paragraph
  356. .if \\n(.$>1 .nr li \\$2n        \" if indent given use it
  357. .in +\\n(liu                \" indent for paragraph
  358. .ti -\\n(liu                \" force first line NOT to indent
  359. .ta +\\n(liu                \" for the label
  360. \&\\$1\t\c
  361. .if \\w'\\$1'u>=(\\n(l\\n(lmu+\\n(liu) .br    \" don't overwrite
  362. ..
  363. .\" The following two macros (hu & hn) have been modified for ELM usage.
  364. .\" If the macros have text as part of the macro call, the text will be
  365. .\" increased in size by two points.  After printing the text, the font
  366. .\" will be returned to normal, otherwise the font will be left bold.
  367. .\"
  368. .\" section
  369. .de hu                    \" header, unnumbered
  370. .                    \" format: .hu [text]
  371. .if !\\n(it .bt                \" end the title and such
  372. .br                    \" force out previous line
  373. .b
  374. .ie \\n(hP .ps \\n(hP
  375. .el        .ps \\n(ps
  376. .ie \\n(hv .vs \\n(hv
  377. .el        .vs \\n(vs
  378. .in \\n(l\\n(lmu            \" stop any indenting
  379. .sn \\n(hsu                \" inter-section spacing
  380. .ne 3v+\\n(.Vu                \" slightly more than 3 lines
  381. .fi                    \" process the text, too
  382. .if \\n(.$>=1 \{\
  383. .ps +2
  384. \\$1
  385. .\}
  386. .if \\n(.$>=2 \\$2
  387. .if \\n(.$>=3 \\$3
  388. .if \\n(.$>=4 \\$4
  389. .if \\n(.$>=5 \\$5
  390. .if \\n(.$>=6 \\$6
  391. .if \\n(.$>=7 \\$7
  392. .if \\n(.$>=8 \\$8
  393. .if \\n(.$=9 \\$9
  394. .if \\n(.$>=1 \{\
  395. .ps -2
  396. .br
  397. .ft 1
  398. .\}
  399. ..
  400. .de hn                    \" header, numbered
  401. .                    \" format: .hn [level] [text]
  402. .if !\\n(it .bt                \" end the title and such
  403. .br                    \" force out previous line
  404. .b
  405. .ie \\n(hP .ps \\n(hP
  406. .el        .ps \\n(ps
  407. .ie \\n(hv .vs \\n(hv
  408. .el        .vs \\n(vs
  409. .in \\n(l\\n(lmu            \" stop any indenting
  410. .sn \\n(hsu                \" inter-section spacing
  411. .ne 3v+\\n(.Vu                \" slightly more than 3 lines
  412. .fi                    \" process the text, too
  413. .ie !'\\$1'' .nr hn \\$1
  414. .el          .nr hn 1
  415. .ie \\n(hn>0 .nr hn -1
  416. .el          .nr hn 0
  417. .ie \\n(hn=0 \{\
  418. .    nr h0 +1            \" add 1 to main section header
  419. .    nr h1 0                \" zap remaining section numbers
  420. .    nr h2 0                \" zap remaining section numbers
  421. .    nr h3 0                \" zap remaining section numbers
  422. .ie \\n(.$>=2 \{\
  423. .ps +2
  424. \\n(h0.
  425. .ps -2
  426. .\}
  427. .el \\n(h0.
  428. .\}
  429. .el .ie \\n(hn=1 \{\
  430. .    nr h1 +1            \" add 1 to the section header
  431. .    nr h2 0                \" zap remaining section numbers
  432. .    nr h3 0                \" zap remaining section numbers
  433. .ie \\n(.$>=2 \{\
  434. .ps +2
  435. \\n(h0.\\n(h1.
  436. .ps -2
  437. .\}
  438. .el \\n(h0.\\n(h1.
  439. .\}
  440. .el .ie \\n(hn=2 \{\
  441. .    nr h2 +1            \" add 1 to the section header
  442. .    nr h3 0                \" zap remaining section numbers
  443. .ie \\n(.$>=2 \{\
  444. .ps +2
  445. \\n(h0.\\n(h1.\\n(h2.
  446. .ps -2
  447. .\}
  448. .el \\n(h0.\\n(h1.\\n(h2.
  449. .\}
  450. .el \{\
  451. .    nr h3 +1            \" add 1 to the section number
  452. .ie \\n(.$>=2 \{\
  453. .ps +2
  454. \\n(h0.\\n(h1.\\n(h2.\\n(h3.
  455. .ps -2
  456. .\}
  457. .el \\n(h0.\\n(h1.\\n(h2.\\n(h3.
  458. .\}
  459. .if \\n(.$>=2 \{\
  460. .ps +2
  461. \\$2
  462. .\}
  463. .if \\n(.$>=3 \\$3
  464. .if \\n(.$>=4 \\$4
  465. .if \\n(.$>=5 \\$5
  466. .if \\n(.$>=6 \\$6
  467. .if \\n(.$>=7 \\$7
  468. .if \\n(.$>=8 \\$8
  469. .if \\n(.$>=9 \\$9
  470. .if \\n(.$>=2 \{\
  471. .br
  472. .ft 1
  473. .ps -2
  474. .\}
  475. ..
  476. .\" displays (no floats, thank God!)
  477. .de sd                    \" start display
  478. .                    \" look for nested displays -- ILLEGAL
  479. .ie \\n(id>0 .er "display within display"
  480. .el \{\
  481. .    ie '\\$1'c' .nr sf 1        \" center the sucker
  482. .    el          .nr sf 0        \" don't center it
  483. .\}
  484. .sn \\n(pdu                \" a little bit of space
  485. .ev 2                    \" switch to display environment
  486. .nf                    \" what you type is what you get
  487. .if \\n(id=0 .di dd            \" start saving text
  488. .rs                    \" don't eat leading space
  489. .nr id +1                \" increment level of display
  490. ..
  491. .de ed                    \" end display
  492. .br                    \" flush line
  493. .ie \\n(id<=0 .er "end display has no corresponding begin display"
  494. .el \{\
  495. .    nr id -1            \" decrement level of display
  496. .    if \\n(id=0 \{\
  497. .        di            \" end diversion
  498. .        fi            \" resume filling
  499. .        in -\\n(piu        \" dedent
  500. .        ev            \" pop environment
  501. .        ne \\n(dnu        \" be sure you have room
  502. .        nf            \" don't reprocess display
  503. .        rs            \" don't eat leading space
  504. .        zi            \" save indents
  505. .        ie \\n(sf .in (\\n(llu-\\n(dlu)/2u    \" center on the line length
  506. .        el .in +\\n(piu        \" indent the sucker
  507. .        dd            \" drop display
  508. .        yi            \" restore indents
  509. .    \}
  510. .\}
  511. .fi                    \" resume filling
  512. .sn \\n(pdu                \" a little bit of space
  513. ..
  514. .\" **********
  515. .\" fonts -- if argument(s), apply only to first
  516. .de b                    \" bold (font 3)
  517. .ie \\n(.$>0 \\&\\$3\\f3\\$1\\fP\\$2
  518. .el .ft 3
  519. ..
  520. .de i                    \" italics (font 2)
  521. .ie \\n(.$>0 \\&\\$3\\f2\\$1\\fP\\$2
  522. .el .ft 2
  523. ..
  524. .de r                    \" roman (font 1)
  525. .ft 1                    \" just restore it
  526. ..
  527. .de bi                    \" bold italics (embolden font 2)
  528. \\&\\$3\c
  529. \\kb\\f2\\$1\\fP\\h'|\\nbu+2u'\\f2\\$1\\fP\\$2
  530. ..
  531. .\" **********
  532. .\" point sizes -- if argument(s), apply only to first
  533. .de sm                    \" reduce point size by 2
  534. .ie \\n(.$>0 \\&\\$3\\s-2\\$1\\s0\\$2
  535. .el .ps -2
  536. ..
  537. .de is                    \" increase point size by 2
  538. .ie \\n(.$>0 \\&\\$3\\s+2\\$1\\s0\\$2
  539. .el .ps +2
  540. ..
  541. .de nl                    \" return to normal size
  542. .ps \\n(ps                \" just reset the point size
  543. ..
  544. .\" **********
  545. .\" handy force space/inhibit more space macros
  546. .de sn                    \" space, then turn on nospace mode
  547. .sp \\$1                \" space
  548. .ns                    \" ignore any more space requests
  549. ..
  550. .de sr                    \" force out space
  551. .rs                    \" turn on spacing mode
  552. .sp \\$1                \" space
  553. ..
  554. .\" **********
  555. .\" end of text and error macros
  556. .de et                    \" end of text macro
  557. .                    \" this: (1) flushes rest of line
  558. .                    \" (2) trips the footer, taking
  559. .                    \" care of footnotes
  560. .sp \\n(.pu
  561. .                    \" check for open displays or footnotes
  562. .if \\n(id>0 .er "unfinished display"
  563. .if \\n(if>0 .er "unfinished footnote"
  564. .                    \" this one means an -mn bug (*sigh*)
  565. .if !'\\n(.z'' .er "diversion \\n(.z not closed"
  566. ..
  567. .de er                    \" print error message
  568. .                    \" flag it as an error
  569. .ds ws "** ERROR **
  570. .                    \" if you have it, give the file name
  571. .if !'\\*(.f'' .as ws " file \\*(.f,
  572. .                    \" put out the line number
  573. .as ws " line \\n(.c
  574. .                    \" and finally the error message
  575. .tm \\*(ws: \\$1
  576. ..
  577. .\" **********
  578. .\" macros in this section are VERY specific to the news documentation
  579. .de pa                    \" protocol appellation (darn names!)
  580. \\&\\$3\\f2\\$1\\fP\\$2
  581. ..
  582. .de ng                    \" news group name
  583. \\&\\$3\\f3\\$1\\fP\\$2
  584. ..
  585. .de cn                    \" computer name
  586. \\&\\$3\\f2\\$1\\fP\\$2
  587. ..
  588. .de hf                    \" header field
  589. \\&\\$3\\*(lq\\$1\\*(rq\\$2
  590. ..
  591. .de cf                    \" contents of field
  592. \\&\\$3\\*(lq\\$1\\*(rq\\$2
  593. ..
  594. .de qc                    \" quote control char (command)
  595. \\&\\$3\\f3<\\s-2\\$1\\s0>\\fP\\$2
  596. ..
  597. .de qp                    \" quote printing char (command)
  598. \\&\\$3\\f3\\$1\\fP\\$2
  599. ..
  600. .de op                    \" option
  601. \\&\\$3\\f3\\$1\\fP\\$2
  602. ..
  603. .\" **********
  604. .\" trademarked names
  605. .de pd                    \" print "PDP-11"
  606. .ie \\n(p1 \\&\\$2\\s-1PDP\\s0-11\\$1
  607. .el \{\
  608. .    nr p1 +1            \" mark footnote as dropped
  609. \\&\\$2\\s-1PDP\\s0-11\\*(rg\\$1
  610. .    fn                \" put out the footnote
  611. \\&\\*(rgPDP-11 is a registered trademark of Digital Equipment Corporation.
  612. .    ef                \" short and sweet ...
  613. .\}
  614. ..
  615. .de ux                    \" print "UNIX"
  616. .ie \\n(ux \\&\\$2\\s-1UNIX\\s0\\$1
  617. .el \{\
  618. .    nr ux +1            \" mark footnote as dropped
  619. \\&\\$2\\s-1UNIX\\s0\\*(rg\\$1
  620. .    fn                \" put out the footnote
  621. \\&\\*(rgUNIX is a registered trademark of AT&T.
  622. .    ef                \" short and sweet ...
  623. .\}
  624. ..
  625. .de vx                    \" print "VAX"
  626. .ie \\n(vx \\&\\$2\\s-1VAX\\s0\\$1
  627. .el \{\
  628. .    nr vx +1            \" mark footnote as dropped
  629. \\&\\$2\\s-1VAX\\s0\\*(rg\\$1
  630. .    fn                \" put out the footnote
  631. \\&\\*(rgVAX is a trademark of Digital Equipment Corporation.
  632. .    ef                \" short and sweet ...
  633. .\}
  634. ..
  635. .\" **********
  636. .\" set up string and number registers
  637. .                    \" set up for the date
  638. .if \n(mo=1  .ds mo January
  639. .if \n(mo=2  .ds mo February
  640. .if \n(mo=3  .ds mo March
  641. .if \n(mo=4  .ds mo April
  642. .if \n(mo=5  .ds mo May
  643. .if \n(mo=6  .ds mo June
  644. .if \n(mo=7  .ds mo July
  645. .if \n(mo=8  .ds mo August
  646. .if \n(mo=9  .ds mo September
  647. .if \n(mo=10 .ds mo October
  648. .if \n(mo=11 .ds mo November
  649. .if \n(mo=12 .ds mo December
  650. .ds dy "\*(mo \n(dy, 19\n(yr
  651. .if \n(dw=1  .ds dw Sunday
  652. .if \n(dw=2  .ds dw Monday
  653. .if \n(dw=3  .ds dw Tuesday
  654. .if \n(dw=4  .ds dw Wednesday
  655. .if \n(dw=5  .ds dw Thursday
  656. .if \n(dw=6  .ds dw Friday
  657. .if \n(dw=7  .ds dw Saturday
  658. .                    \" NROFF dependencies
  659. .if n \{\
  660. .                    \" string registers
  661. .    ds rg (R)
  662. .    ds lq ""
  663. .    ds rq ""
  664. .    ds f1 "\*(dy
  665. .                    \" number registers
  666. .    nr hs 1v            \" space before section header
  667. .    nr pd 1v            \" inter-paragraph spacing
  668. .    nr bm 1.0i            \" height of bottom margin
  669. .\}
  670. .                    \" NROFF dependencies
  671. .if t \{\
  672. .                    \" string registers
  673. .    ds rg \\u\\s-2\\(rg\\s0\\d
  674. .    ds lq ``
  675. .    ds rq ''
  676. .                    \" number registers
  677. .    nr hs 1v            \" space before section header
  678. .    nr pd 0.3v            \" inter-paragraph spacing
  679. .    nr bm 1.0i+1v            \" height of bottom margin (wacky laser)
  680. .\}
  681. .                    \" these are the same for [NT]ROFF
  682. .ds dg \(dg
  683. .ds vr "News Version B2.11
  684. .ds pv "News macros 1.5
  685. .ds h1 - % -
  686. .nr bt 0.5i+1v                \" bottom of page to footer
  687. .nr cm 0                \" no cut marks
  688. .nr fc 0 1                \" init footnote count
  689. .nr fl 5.5i                \" footnote line length
  690. .nr fp 0-\n(bmu                \" fo macro trap location
  691. .nr h0 0                \" init section header level 0
  692. .nr h1 0                \" init section header level 1
  693. .nr h2 0                \" init section header level 2
  694. .nr h3 0                \" init section header level 3
  695. .nr id 0                \" 1 in display
  696. .nr if 0                \" 1 in keep
  697. .nr it 0                \" 1 when beyond title, etc.
  698. .nr li 5n                \" indent for labelled paragraph
  699. .nr ll 6.5i                \" line length
  700. .nr lm 0                \" left margin
  701. .nr l0 0                \" first indent level
  702. .nr mt 1.5i+1v                \" title goes down this far
  703. .nr pi 5n                \" regular paragraph indent
  704. .nr po 1.0i                \" page offset
  705. .nr ps 10                \" point size
  706. .nr tm 1.0i                \" height of top margin
  707. .nr tt 0.5i-0.5v            \" top of page to header
  708. .nr p1 0                \" no PDP-TM message yet
  709. .nr ux 0                \" no UNIX-TM message yet
  710. .nr vx 0                \" no VAX-TM message yet
  711. .nr vs 12                \" vertical spacing
  712. .\" set things up
  713. .\" DSINC changes for XROFF
  714. .nr f1 1
  715. .nr f2 1
  716. .nr s1 10
  717. .nr s2 10
  718. .nr v1 12
  719. .nr v2 12
  720. .ps 10
  721. .vs 12
  722. .\" DSINC end changes for XROFF
  723. .po \n(pou                \" set page offset
  724. .ps \n(ps                \" set previous, current
  725. .ps \n(ps                \"   point sizes
  726. .vs \n(vs                \" set previous, current
  727. .vs \n(vs                \"   vertical spacings
  728. .ll \n(llu                \" set line length
  729. .lt \n(llu                \" set title line length
  730. .ev 1                    \" *** footnote environment
  731. .ps \n(ps-2p                \" set previous, current
  732. .ps \n(ps-2p                \"   point sizes
  733. .vs \n(vs-2p                \" set previous, current
  734. .vs \n(vs-2p                \"   vertical spacings
  735. .ll \n(flu                \" set line length
  736. .lt \n(flu                \" set title line length
  737. .ev                    \" *** pop environment
  738. .ev 2                    \" *** footnote environment
  739. .ps \n(ps                \" set previous, current
  740. .ps \n(ps                \"   point sizes
  741. .vs \n(vs                \" set previous, current
  742. .vs \n(vs                \"   vertical spacings
  743. .ll \n(llu                \" set line length
  744. .lt \n(llu                \" set title line length
  745. .ev                    \" *** pop environment
  746. .\" now set internal registers (for the first header section)
  747. .nr f1 \n(.f                \" saved font #1
  748. .nr f2 \n(.f                \" saved font #2
  749. .nr s1 \n(.s                \" saved point size #1
  750. .nr s2 \n(.s                \" saved point size #2
  751. .nr v1 \n(.v                \" saved vertical spacing #1
  752. .nr v2 \n(.v                \" saved vertical spacing #2
  753. .\" install traps
  754. .wh 0i hd                \" position header trap
  755. .wh -\n(bmu fo                \" position footer trap
  756. .wh \n(.pu+1i fx            \" put footnote overflow trap here
  757. .ch fx -\n(bmu                \" move it over fo
  758. .wh -\n(btu pf                \" print the bottom margin here
  759. .em et                    \" at end of file, call et
  760. .\" couple of miscellaneous requests
  761. .bd S 3 3                \" embolden special font chars if B
  762. .hy 2                    \" don't hyphenate last lines
  763.  
  764.